<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/10/17/017
 * Time: 上午 11:41
 */

namespace app\service;


use app\common\model\PlatRed;
use think\Cache;
use think\cache\driver\Redis;
use think\Db;
use think\Exception;
use think\Log;

class PlatRedService
{
    /**
     * 获取平台红包分页列表数据
     */
    public function getPlatPageRedLists($field = "*")
    {
        $pageLists = (new PlatRed())->getItems(1,[],$field);

        return $pageLists;
    }

    /**
     * 获取手机号是否存在用户
     * @param string $mobile    手机号
     */
    public function getUserMobileExists($mobile = "")
    {
        return  Db::name('member')->field('member_id')->where(['member_mobile'=>$mobile])->find();
    }

    /**
     * 新增用户可用红包
     * @param array $data   新增数据
     */
    public function addUserRedData($redData = [])
    {
        try{
            Db::startTrans();
            #新增用户红包记录
            $res_1 = Db::name('plat_red')->insertGetId($redData);
            #更新用户，member表中,用户的可用红包金额
            $res_2 = Db::name('member')->where(['member_mobile'=>$redData['member_mobile']])->setInc('available_red_amount',$redData['red_amount']);

            if($res_1 && $res_2){
                Db::commit();
                return  true;
            }else{
                Db::rollback();
                return  false;
            }
        }catch (Exception $e){
            return  false;
        }
    }

    /**
     * 更新，平台赠送给用户的平台红包中，已过期的金额减掉 & 并记录日志
     */
    public function updateUserExpiredData()
    {
        $condition['end_date']   = ['elt',strtotime(date("Y-m-d"))];    #搜索结束时间 小于等于当前执行定时任务的记录
        $field = 'member_id,member_mobile,red_amount';

        try{
            $rows = Db::name('plat_red')->field($field)->where($condition)->select();
            $temp = []; #组装数据：member_id => 过期红包金额
            if(!empty($rows)){
                foreach ($rows as $k=>$row){
                    if(empty($temp[$row['member_id']])) $temp[$row['member_id']] = $row['red_amount'];
                    else
                        $temp[$row['member_id']] += $row['red_amount'];
                }
            }
            //更新用户的可用红包金额
            $handRes = true;
            if(!empty($temp)){
                foreach ($temp as $memberId => $redAmount){
                    //获取用户的 可用红包余额。如果可用红包余额 < 过期红包余额（出现该情况，有可能是手动更改过记录）,则更新用户可用红包余额为0.
                    //目前也只有该功能涉及到 用户平台红包
                    $findRes = Db::name('member')->field('available_red_amount')->where(['member_id'=>$memberId])->find();

                    if(!empty($findRes) && $findRes['available_red_amount'] == 0)  continue;
                    if(!empty($findRes) && $findRes['available_red_amount'] >= $redAmount)  $handRes = Db::name('member')->where(['member_id'=>$memberId])->setDec('available_red_amount',$redAmount);
                    else
                        $handRes = Db::name('member')->where(['member_id'=>$memberId])->setField('available_red_amount',0);
                }
            }

            Log::write(date('Y-m-d H:i:s')."--PlatRedService/updateUserExpiredData：Result--[$handRes]");
        }catch(Exception $e){
            Log::write(date('Y-m-d H:i:s').'--PlatRedService/updateUserExpiredData：Has Exception handle error！'.$e->getMessage());
        }
    }

    /**
     * 更新用户的手机端信息。
     * @param array $condition  用户条件
     */
    public function updateMemberToken($member_id = 0)
    {
        //连接手机端Redis库
        $options = [
            'host' => '127.0.0.1',
            'port' => 6379,
            'select' => config('mobile_cache_config.select'),
            'prefix' => config('mobile_cache_config.prefix'),
            'type'   => config('cache.type')
        ];
        $cache = Cache::connect($options);

        $member_info = model('member')->getMemberInfo(['member_id'=>$member_id]);
        $cache->set('member'.$member_id,$member_info);
    }
}